package com.sec.android.app.myfiles.util;

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmoticonUtils {

    private static ArrayList<String> unicodeList;
    private static Pattern sPattern;

    public static boolean hasEmoticon(CharSequence chars) {
        try {
            Pattern ptn = getPattern();
            Matcher match = ptn.matcher(chars);
            return match.find();
        } catch (Exception e) {
            return false;
        }
    }

    private static ArrayList<String> getUnicodeList() {
        return unicodeList;
    }

    private static synchronized Pattern getPattern() {
        if (sPattern == null) {
            StringBuilder emojiPattern = new StringBuilder(getUnicodeList().size() * 2);
            emojiPattern.append('(');
            ArrayList<String> list = getUnicodeList();
            for (String str : list) {
                emojiPattern.append(Pattern.quote(unicodeToUTF16(str)));
                emojiPattern.append('|');
            }
            emojiPattern.replace(emojiPattern.length() - 1, emojiPattern.length(), ")");
            sPattern = Pattern.compile(emojiPattern.toString());
        }
        return sPattern;
    }

    protected static String unicodeToUTF16(String unicode) {
        String convertedUTF16Str;
        int unicodeInteger, zzzzz, yyyy;
        unicodeInteger = Integer.decode(unicode);

        if (unicode.length() - 2 > 4) {
            zzzzz = (0x1F0000 & unicodeInteger) >> 16;
            yyyy = zzzzz - 1;

            int rear2byteFixed = 0xDC00;
            int rear2byte = rear2byteFixed | (unicodeInteger & 0x3FF);
            String rear2byteString = "0x" + Integer.toHexString(rear2byte);

            int former2byteFixed = 0xD800;
            int former2byte = former2byteFixed | ((unicodeInteger & 0xFC00) >> 10);
            former2byte = former2byte | (yyyy << 6);
            String former2byteString = "0x" + Integer.toHexString(former2byte);

            int rear2byteInt = Integer.decode(rear2byteString);
            int former2byteInt = Integer.decode(former2byteString);

            char[] characters = {(char) former2byteInt, (char) rear2byteInt};
            convertedUTF16Str = String.valueOf(characters);
        } else {
            convertedUTF16Str = String.valueOf((char) unicodeInteger);
        }
        return convertedUTF16Str;
    }

    // ArrayList to make samsung emoji pattern
    static {
        unicodeList = new ArrayList<>();

        // Category 1 (Faces, 153)
        unicodeList.add("0x1f600");
        unicodeList.add("0x1f601");
        unicodeList.add("0x1f602");
        unicodeList.add("0x1f603");
        unicodeList.add("0x1f604");
        unicodeList.add("0x1f605");
        unicodeList.add("0x1f606");
        unicodeList.add("0x1f609");

        unicodeList.add("0x1f60a");
        unicodeList.add("0x1f60b");
        unicodeList.add("0x1f60e");
        unicodeList.add("0x1f60d");
        unicodeList.add("0x1f618");
        unicodeList.add("0x1f617");
        unicodeList.add("0x1f619");
        unicodeList.add("0x1f61a");

        unicodeList.add("0x263a");
        unicodeList.add("0x1f642");
        unicodeList.add("0x1f917");
        unicodeList.add("0x1f607");
        unicodeList.add("0x1f914");
        unicodeList.add("0x1f610");
        unicodeList.add("0x1f611");
        unicodeList.add("0x1f636");
        unicodeList.add("0x1F920");
        unicodeList.add("0x1F921");
        unicodeList.add("0x1f922");
        unicodeList.add("0x1f923");
        unicodeList.add("0x1F924");
        unicodeList.add("0x1F925");
        unicodeList.add("0x1f927");

        unicodeList.add("0x1f644");
        unicodeList.add("0x1f60f");
        unicodeList.add("0x1f623");
        unicodeList.add("0x1f625");
        unicodeList.add("0x1f62e");
        unicodeList.add("0x1f910");
        unicodeList.add("0x1f62f");
        unicodeList.add("0x1f634");

        unicodeList.add("0x1f62a");
        unicodeList.add("0x1f62b");
        unicodeList.add("0x1f60c");
        unicodeList.add("0x1f913");
        unicodeList.add("0x1f61b");
        unicodeList.add("0x1f61c");
        unicodeList.add("0x1f61d");
        unicodeList.add("0x1f641");

        unicodeList.add("0x1f612");
        unicodeList.add("0x1f613");
        unicodeList.add("0x1f614");
        unicodeList.add("0x1f615");
        unicodeList.add("0x1f616");
        unicodeList.add("0x1f643");
        unicodeList.add("0x1f637");
        unicodeList.add("0x1f912");

        unicodeList.add("0x1f915");
        unicodeList.add("0x1f911");
        unicodeList.add("0x1f632");
        unicodeList.add("0x1f61e");
        unicodeList.add("0x1f61f");
        unicodeList.add("0x1f624");
        unicodeList.add("0x1f622");
        unicodeList.add("0x1f62d");

        unicodeList.add("0x1f626");
        unicodeList.add("0x1f627");
        unicodeList.add("0x1f628");
        unicodeList.add("0x1f629");
        unicodeList.add("0x1f62c");
        unicodeList.add("0x1f630");
        unicodeList.add("0x1f631");
        unicodeList.add("0x1f633");

        unicodeList.add("0x1f635");
        unicodeList.add("0x1f621");
        unicodeList.add("0x1f620");
        unicodeList.add("0x263b");
        unicodeList.add("0x2639");
        unicodeList.add("0x1f47f");
        unicodeList.add("0x1f608");
        unicodeList.add("0x1f479");

        unicodeList.add("0x1f47a");
        unicodeList.add("0x1f480");
        unicodeList.add("0x1f47b");
        unicodeList.add("0x1f47d");
        unicodeList.add("0x1f47e");
        unicodeList.add("0x1f916");
        unicodeList.add("0x1f4a9");
        unicodeList.add("0x1f63a");

        unicodeList.add("0x1f638");
        unicodeList.add("0x1f639");
        unicodeList.add("0x1f63b");
        unicodeList.add("0x1f63c");
        unicodeList.add("0x1f63d");
        unicodeList.add("0x1f640");
        unicodeList.add("0x1f63f");
        unicodeList.add("0x1f63e");

        unicodeList.add("0x1f648");
        unicodeList.add("0x1f649");
        unicodeList.add("0x1f64a");
        unicodeList.add("0x1f466");
        unicodeList.add("0x1f467");
        unicodeList.add("0x1f468");
        unicodeList.add("0x1f469");
        unicodeList.add("0x1f474");
        unicodeList.add("0x1f475");
        unicodeList.add("0x1f476");

        unicodeList.add("0x1f471");
        unicodeList.add("0x1f46e");
        unicodeList.add("0x1f472");
        unicodeList.add("0x1f473");
        unicodeList.add("0x1f477");
        unicodeList.add("0x1f478");
        unicodeList.add("0x1f482");
        unicodeList.add("0x1f575");

        unicodeList.add("0x1f385");
        unicodeList.add("0x1f47c");
        unicodeList.add("0x1f46f");
        unicodeList.add("0x1f486");
        unicodeList.add("0x1f487");
        unicodeList.add("0x1f470");
        unicodeList.add("0x1f64d");
        unicodeList.add("0x1f64e");

        unicodeList.add("0x1f645");
        unicodeList.add("0x1f646");
        unicodeList.add("0x1f481");
        unicodeList.add("0x1f64b");
        unicodeList.add("0x1f647");
        unicodeList.add("0x1f64c");
        unicodeList.add("0x1f64f");
        unicodeList.add("0x1f5e3");

        unicodeList.add("0x1f464");
        unicodeList.add("0x1f465");
        unicodeList.add("0x1f483");
        unicodeList.add("0x1f574");
        unicodeList.add("0x1f46b");
        unicodeList.add("0x1f46c");
        unicodeList.add("0x1f46d");
        unicodeList.add("0x1f48f");

        unicodeList.add("0x1f491");
        unicodeList.add("0x1f46a");
        unicodeList.add("0x1f4aa");
        unicodeList.add("0x1f448");
        unicodeList.add("0x1f449");
        unicodeList.add("0x261d");
        unicodeList.add("0x1f446");
        unicodeList.add("0x1f595");

        unicodeList.add("0x1f447");
        unicodeList.add("0x270c");
        unicodeList.add("0x1f596");
        unicodeList.add("0x1f918");
        unicodeList.add("0x1f591");
        unicodeList.add("0x1f590");
        unicodeList.add("0x270a");
        unicodeList.add("0x270b");

        unicodeList.add("0x1f44a");
        unicodeList.add("0x1f44c");
        unicodeList.add("0x1f44d");
        unicodeList.add("0x1f44e");
        unicodeList.add("0x1f592");
        unicodeList.add("0x1f593");
        unicodeList.add("0x1f44b");
        unicodeList.add("0x1f44f");

        unicodeList.add("0x1f450");
        unicodeList.add("0x1f485");
        unicodeList.add("0x1f58e");
        unicodeList.add("0x270d");
        unicodeList.add("0x1f442");
        unicodeList.add("0x1f443");
        unicodeList.add("0x1f463");
        unicodeList.add("0x1f440");

        unicodeList.add("0x1f441");
        unicodeList.add("0x1f445");
        unicodeList.add("0x1f444");
        unicodeList.add("0x1f48b");
        unicodeList.add("0x1f498");
        unicodeList.add("0x2764");
        unicodeList.add("0x1f493");
        unicodeList.add("0x1f494");

        unicodeList.add("0x1f495");
        unicodeList.add("0x1f496");
        unicodeList.add("0x1f497");
        unicodeList.add("0x1f499");
        unicodeList.add("0x1f49a");
        unicodeList.add("0x1f49b");
        unicodeList.add("0x1f49c");
        unicodeList.add("0x1f49d");

        unicodeList.add("0x1f49e");
        unicodeList.add("0x1f49f");
        unicodeList.add("0x2763");
        unicodeList.add("0x1f48c");
        unicodeList.add("0x1f4a4");
        unicodeList.add("0x1f4a2");
        unicodeList.add("0x1f4a3");
        unicodeList.add("0x1f4a5");

        unicodeList.add("0x1f4a6");
        unicodeList.add("0x1f4a8");
        unicodeList.add("0x1f4ab");
        unicodeList.add("0x1f4ac");
        unicodeList.add("0x1f5e8");
        unicodeList.add("0x1f5ef");
        unicodeList.add("0x1f4ad");
        unicodeList.add("0x1f573");

        unicodeList.add("0x1f453");
        unicodeList.add("0x1f576");
        unicodeList.add("0x1f454");
        unicodeList.add("0x1f455");
        unicodeList.add("0x1f456");
        unicodeList.add("0x1f457");
        unicodeList.add("0x1f458");
        unicodeList.add("0x1f459");

        unicodeList.add("0x1f45a");
        unicodeList.add("0x1f45b");
        unicodeList.add("0x1f45c");
        unicodeList.add("0x1f45d");
        unicodeList.add("0x1f6cd");
        unicodeList.add("0x1f392");
        unicodeList.add("0x1f45e");
        unicodeList.add("0x1f45f");

        unicodeList.add("0x1f460");
        unicodeList.add("0x1f461");
        unicodeList.add("0x1f462");
        unicodeList.add("0x1f451");
        unicodeList.add("0x1f452");
        unicodeList.add("0x1f3a9");
        unicodeList.add("0x1f393");
        unicodeList.add("0x1f484");

        unicodeList.add("0x1f48d");
        unicodeList.add("0x1f48e");
        unicodeList.add("0x1f4ff");

        // Category 2 (Object, 155)
        unicodeList.add("0x1f507");
        unicodeList.add("0x1f508");
        unicodeList.add("0x1f509");
        unicodeList.add("0x1f50a");
        unicodeList.add("0x1f568");
        unicodeList.add("0x1f569");
        unicodeList.add("0x1f56a");
        unicodeList.add("0x1f4e2");

        unicodeList.add("0x1f4e3");
        unicodeList.add("0x1f4ef");
        unicodeList.add("0x1f514");
        unicodeList.add("0x1f56d");
        unicodeList.add("0x1f515");
        unicodeList.add("0x1f3bc");
        unicodeList.add("0x1f3b5");
        unicodeList.add("0x1f3b6");

        unicodeList.add("0x2669");
        unicodeList.add("0x1f399");
        unicodeList.add("0x1f39a");
        unicodeList.add("0x1f39b");
        unicodeList.add("0x1f3a4");
        unicodeList.add("0x1f3a7");
        unicodeList.add("0x1f3b7");
        unicodeList.add("0x1f3b8");

        unicodeList.add("0x1f3b9");
        unicodeList.add("0x1f3ba");
        unicodeList.add("0x1f3bb");
        unicodeList.add("0x1f4fb");
        unicodeList.add("0x1f4f1");
        unicodeList.add("0x1f4f2");
        unicodeList.add("0x260e");
        unicodeList.add("0x260f");

        unicodeList.add("0x1f4de");
        unicodeList.add("0x1f4df");
        unicodeList.add("0x1f4e0");
        unicodeList.add("0x1f50b");
        unicodeList.add("0x1f50c");
        unicodeList.add("0x1f4bb");
        unicodeList.add("0x1f5a5");
        unicodeList.add("0x1f5a8");

        unicodeList.add("0x2328");
        unicodeList.add("0x1f5b1");
        unicodeList.add("0x1f5b2");
        unicodeList.add("0x1f4bd");
        unicodeList.add("0x1f4be");
        unicodeList.add("0x1f4bf");
        unicodeList.add("0x1f4c0");
        unicodeList.add("0x1f3a5");

        unicodeList.add("0x1f3ac");
        unicodeList.add("0x1f4fd");
        unicodeList.add("0x1f4fa");
        unicodeList.add("0x1f4f7");
        unicodeList.add("0x1f4f8");
        unicodeList.add("0x1f4f9");
        unicodeList.add("0x1f4fc");
        unicodeList.add("0x1f50d");

        unicodeList.add("0x1f50e");
        unicodeList.add("0x1f52c");
        unicodeList.add("0x1f52d");
        unicodeList.add("0x1f4e1");
        unicodeList.add("0x1f56f");
        unicodeList.add("0x1f4a1");
        unicodeList.add("0x1f54e");
        unicodeList.add("0x1f526");

        unicodeList.add("0x1f3ee");
        unicodeList.add("0x1f4d4");
        unicodeList.add("0x1f4d5");
        unicodeList.add("0x1f4d6");
        unicodeList.add("0x1f4d7");
        unicodeList.add("0x1f4d8");
        unicodeList.add("0x1f4d9");
        unicodeList.add("0x1f4da");

        unicodeList.add("0x1f4d3");
        unicodeList.add("0x1f4d2");
        unicodeList.add("0x1f4c3");
        unicodeList.add("0x1f4dc");
        unicodeList.add("0x1f4c4");
        unicodeList.add("0x1f4f0");
        unicodeList.add("0x1f5de");
        unicodeList.add("0x1f4d1");

        unicodeList.add("0x1f516");
        unicodeList.add("0x1f4b0");
        unicodeList.add("0x1f4b4");
        unicodeList.add("0x1f4b5");
        unicodeList.add("0x1f4b6");
        unicodeList.add("0x1f4b7");
        unicodeList.add("0x1f4b8");
        unicodeList.add("0x1f4b3");

        unicodeList.add("0x1f4b9");
        unicodeList.add("0x2709");
        unicodeList.add("0x1f4e7");
        unicodeList.add("0x1f4e8");
        unicodeList.add("0x1f4e9");
        unicodeList.add("0x1f4e4");
        unicodeList.add("0x1f4e5");
        unicodeList.add("0x1f4e6");
        unicodeList.add("0x1f5dc");

        unicodeList.add("0x1f4eb");
        unicodeList.add("0x1f4ea");
        unicodeList.add("0x1f4ec");
        unicodeList.add("0x1f4ed");
        unicodeList.add("0x1f4ee");
        unicodeList.add("0x1f5f3");
        unicodeList.add("0x270f");
        unicodeList.add("0x2712");

        unicodeList.add("0x1f58b");
        unicodeList.add("0x1f58a");
        unicodeList.add("0x1f58c");
        unicodeList.add("0x1f58d");
        unicodeList.add("0x1f4dd");
        unicodeList.add("0x1f4bc");
        unicodeList.add("0x1f4c1");
        unicodeList.add("0x1f4c2");

        unicodeList.add("0x1f5c2");
        unicodeList.add("0x1f4c5");
        unicodeList.add("0x1f4c6");
        unicodeList.add("0x1f5d2");
        unicodeList.add("0x1f5d3");
        unicodeList.add("0x1f4c7");
        unicodeList.add("0x1f4c8");
        unicodeList.add("0x1f4c9");

        unicodeList.add("0x1f4ca");
        unicodeList.add("0x1f4cb");
        unicodeList.add("0x1f4cc");
        unicodeList.add("0x1f4cd");
        unicodeList.add("0x1f4ce");
        unicodeList.add("0x1f587");
        unicodeList.add("0x1f4cf");
        unicodeList.add("0x1f4d0");

        unicodeList.add("0x2702");
        unicodeList.add("0x1f5c3");
        unicodeList.add("0x1f5c4");
        unicodeList.add("0x1f5d1");
        unicodeList.add("0x1f512");
        unicodeList.add("0x1f513");
        unicodeList.add("0x1f50f");
        unicodeList.add("0x1f510");

        unicodeList.add("0x1f511");
        unicodeList.add("0x1f5dd");
        unicodeList.add("0x1f528");
        unicodeList.add("0x1f6e0");
        unicodeList.add("0x1f527");
        unicodeList.add("0x1f529");
        unicodeList.add("0x26cf");
        unicodeList.add("0x1f517");

        unicodeList.add("0x1f489");
        unicodeList.add("0x1f48a");
        unicodeList.add("0x1f5e1");
        unicodeList.add("0x1f52a");
        unicodeList.add("0x1f52b");
        unicodeList.add("0x1f6e1");
        unicodeList.add("0x1f3f9");
        unicodeList.add("0x1f5ff");

        unicodeList.add("0x1f6e2");
        unicodeList.add("0x1f52e");
        unicodeList.add("0x2697");

        // Category 3 (Nature, 164)
        unicodeList.add("0x1f435");
        unicodeList.add("0x1f412");
        unicodeList.add("0x1f436");
        unicodeList.add("0x1f415");
        unicodeList.add("0x1f429");
        unicodeList.add("0x1f43a");
        unicodeList.add("0x1f431");
        unicodeList.add("0x1f408");
        unicodeList.add("0x1f981");
        unicodeList.add("0x1f42f");
        unicodeList.add("0x1f405");
        unicodeList.add("0x1f406");
        unicodeList.add("0x1f434");
        unicodeList.add("0x1f40e");
        unicodeList.add("0x1f984");
        unicodeList.add("0x1f42e");
        unicodeList.add("0x1f402");
        unicodeList.add("0x1f403");
        unicodeList.add("0x1f404");
        unicodeList.add("0x1f437");
        unicodeList.add("0x1f416");
        unicodeList.add("0x1f417");
        unicodeList.add("0x1f43d");
        unicodeList.add("0x1f40f");
        unicodeList.add("0x1f411");
        unicodeList.add("0x1f410");
        unicodeList.add("0x1f42a");
        unicodeList.add("0x1f42b");
        unicodeList.add("0x1f418");
        unicodeList.add("0x1f42d");
        unicodeList.add("0x1f401");
        unicodeList.add("0x1f400");
        unicodeList.add("0x1f439");
        unicodeList.add("0x1f430");
        unicodeList.add("0x1f407");
        unicodeList.add("0x1f43f");
        unicodeList.add("0x1f43b");
        unicodeList.add("0x1f428");
        unicodeList.add("0x1f43c");
        unicodeList.add("0x1f43e");
        unicodeList.add("0x1f983");
        unicodeList.add("0x1f414");
        unicodeList.add("0x1f413");
        unicodeList.add("0x1f423");
        unicodeList.add("0x1f424");
        unicodeList.add("0x1f425");
        unicodeList.add("0x1f426");
        unicodeList.add("0x1f427");
        unicodeList.add("0x1f54a");
        unicodeList.add("0x1f438");
        unicodeList.add("0x1f40a");
        unicodeList.add("0x1f422");
        unicodeList.add("0x1f40d");
        unicodeList.add("0x1f432");
        unicodeList.add("0x1f409");
        unicodeList.add("0x1f433");
        unicodeList.add("0x1f40b");
        unicodeList.add("0x1f42c");
        unicodeList.add("0x1f41f");
        unicodeList.add("0x1f420");
        unicodeList.add("0x1f421");
        unicodeList.add("0x1f419");
        unicodeList.add("0x1f41a");
        unicodeList.add("0x1f980");
        unicodeList.add("0x1f40c");
        unicodeList.add("0x1f41b");
        unicodeList.add("0x1f41c");
        unicodeList.add("0x1f41d");
        unicodeList.add("0x1f41e");
        unicodeList.add("0x1f577");
        unicodeList.add("0x1f578");
        unicodeList.add("0x1f982");
        unicodeList.add("0x1f490");
        unicodeList.add("0x1f338");
        unicodeList.add("0x1f4ae");
        unicodeList.add("0x1f3f5");
        unicodeList.add("0x1f339");
        unicodeList.add("0x1f33a");
        unicodeList.add("0x1f33b");
        unicodeList.add("0x1f33c");
        unicodeList.add("0x1f337");
        unicodeList.add("0x2698");
        unicodeList.add("0x1f331");
        unicodeList.add("0x1f332");
        unicodeList.add("0x1f333");
        unicodeList.add("0x1f334");
        unicodeList.add("0x1f335");
        unicodeList.add("0x1f33e");
        unicodeList.add("0x1f33f");
        unicodeList.add("0x2618");
        unicodeList.add("0x1f340");
        unicodeList.add("0x1f341");
        unicodeList.add("0x1f342");
        unicodeList.add("0x1f343");
        unicodeList.add("0x1f347");
        unicodeList.add("0x1f348");
        unicodeList.add("0x1f349");
        unicodeList.add("0x1f34a");
        unicodeList.add("0x1f34b");
        unicodeList.add("0x1f34c");
        unicodeList.add("0x1f34d");
        unicodeList.add("0x1f34e");
        unicodeList.add("0x1f34f");
        unicodeList.add("0x1f350");
        unicodeList.add("0x1f351");
        unicodeList.add("0x1f352");
        unicodeList.add("0x1f353");
        unicodeList.add("0x1f345");
        unicodeList.add("0x1f346");
        unicodeList.add("0x1f33d");
        unicodeList.add("0x1f336");
        unicodeList.add("0x1f344");
        unicodeList.add("0x1f330");
        unicodeList.add("0x1f35e");
        unicodeList.add("0x1f9c0");
        unicodeList.add("0x1f356");
        unicodeList.add("0x1f357");
        unicodeList.add("0x1f354");
        unicodeList.add("0x1f35f");
        unicodeList.add("0x1f355");
        unicodeList.add("0x1f32d");
        unicodeList.add("0x1f32e");
        unicodeList.add("0x1f32f");
        unicodeList.add("0x1f37f");
        unicodeList.add("0x1f372");
        unicodeList.add("0x1f371");
        unicodeList.add("0x1f358");
        unicodeList.add("0x1f359");
        unicodeList.add("0x1f35a");
        unicodeList.add("0x1f35c");
        unicodeList.add("0x1f35b");
        unicodeList.add("0x1f35d");
        unicodeList.add("0x1f360");
        unicodeList.add("0x1f362");
        unicodeList.add("0x1f363");
        unicodeList.add("0x1f364");
        unicodeList.add("0x1f365");
        unicodeList.add("0x1f361");
        unicodeList.add("0x1f366");
        unicodeList.add("0x1f368");
        unicodeList.add("0x1f367");
        unicodeList.add("0x1f369");
        unicodeList.add("0x1f36a");
        unicodeList.add("0x1f382");
        unicodeList.add("0x1f370");
        unicodeList.add("0x1f36b");
        unicodeList.add("0x1f36c");
        unicodeList.add("0x1f36d");
        unicodeList.add("0x1f36e");
        unicodeList.add("0x1f36f");
        unicodeList.add("0x1f37c");
        unicodeList.add("0x2615");
        unicodeList.add("0x1f375");
        unicodeList.add("0x1f376");
        unicodeList.add("0x1f37e");
        unicodeList.add("0x1f377");
        unicodeList.add("0x1f378");
        unicodeList.add("0x1f379");
        unicodeList.add("0x1f37a");
        unicodeList.add("0x1f37b");
        unicodeList.add("0x1f37d");
        unicodeList.add("0x1f374");
        unicodeList.add("0x1f373");
        unicodeList.add("0x1f3fa");
        unicodeList.add("0x26b1");

        // Category 4 (Places, 279)
        unicodeList.add("0x1f30d");
        unicodeList.add("0x1f30e");
        unicodeList.add("0x1f30f");
        unicodeList.add("0x1f310");
        unicodeList.add("0x1f5fa");
        unicodeList.add("0x1f3d4");
        unicodeList.add("0x1f30b");
        unicodeList.add("0x1f5fb");
        unicodeList.add("0x1f3d5");
        unicodeList.add("0x1f3d6");
        unicodeList.add("0x1f3dc");
        unicodeList.add("0x1f3dd");
        unicodeList.add("0x26f1");
        unicodeList.add("0x1f3de");
        unicodeList.add("0x1f3df");
        unicodeList.add("0x1f3db");
        unicodeList.add("0x1f3d7");
        unicodeList.add("0x1f3d8");
        unicodeList.add("0x1f3d9");
        unicodeList.add("0x1f3da");
        unicodeList.add("0x1f3e0");
        unicodeList.add("0x1f3e1");
        unicodeList.add("0x26ea");
        unicodeList.add("0x1f54b");
        unicodeList.add("0x1f54c");
        unicodeList.add("0x1f3e2");
        unicodeList.add("0x1f3e3");
        unicodeList.add("0x1f3e4");
        unicodeList.add("0x1f3e5");
        unicodeList.add("0x1f3e6");
        unicodeList.add("0x1f3e7");
        unicodeList.add("0x1f3e8");
        unicodeList.add("0x1f3e9");
        unicodeList.add("0x1f3ea");
        unicodeList.add("0x1f3eb");
        unicodeList.add("0x1f3ec");
        unicodeList.add("0x1f3ed");
        unicodeList.add("0x1f3ef");
        unicodeList.add("0x1f3f0");
        unicodeList.add("0x1f492");
        unicodeList.add("0x1f54d");
        unicodeList.add("0x1f5fc");
        unicodeList.add("0x1f5fd");
        unicodeList.add("0x1f5fe");
        unicodeList.add("0x26f2");
        unicodeList.add("0x26fa");
        unicodeList.add("0x1f301");
        unicodeList.add("0x1f303");
        unicodeList.add("0x1f304");
        unicodeList.add("0x1f305");
        unicodeList.add("0x1f306");
        unicodeList.add("0x1f307");
        unicodeList.add("0x1f309");
        unicodeList.add("0x26fc");
        unicodeList.add("0x1f30c");
        unicodeList.add("0x1f3a0");
        unicodeList.add("0x1f3a1");
        unicodeList.add("0x1f3a2");
        unicodeList.add("0x1f488");
        unicodeList.add("0x1f3aa");
        unicodeList.add("0x1f3ad");
        unicodeList.add("0x1f5bc");
        unicodeList.add("0x1f3a8");
        unicodeList.add("0x1f3b0");
        unicodeList.add("0x1f682");
        unicodeList.add("0x1f683");
        unicodeList.add("0x1f684");
        unicodeList.add("0x1f685");
        unicodeList.add("0x1f686");
        unicodeList.add("0x1f687");
        unicodeList.add("0x1f688");
        unicodeList.add("0x1f689");
        unicodeList.add("0x1f68a");
        unicodeList.add("0x1f69d");
        unicodeList.add("0x1f69e");
        unicodeList.add("0x1f68b");
        unicodeList.add("0x1f68c");
        unicodeList.add("0x1f68d");
        unicodeList.add("0x1f68e");
        unicodeList.add("0x1f68f");
        unicodeList.add("0x1f690");
        unicodeList.add("0x1f691");
        unicodeList.add("0x1f692");
        unicodeList.add("0x1f6a1");
        unicodeList.add("0x1f69f");
        unicodeList.add("0x1f6a0");
        unicodeList.add("0x1f693");
        unicodeList.add("0x1f694");
        unicodeList.add("0x1f695");
        unicodeList.add("0x1f696");
        unicodeList.add("0x1f697");
        unicodeList.add("0x1f698");
        unicodeList.add("0x1f699");
        unicodeList.add("0x1f69a");
        unicodeList.add("0x1f69b");
        unicodeList.add("0x26df");
        unicodeList.add("0x1f69c");
        unicodeList.add("0x26fd");
        unicodeList.add("0x1f6e3");
        unicodeList.add("0x1f6e4");
        unicodeList.add("0x1f6a8");
        unicodeList.add("0x1f6a5");
        unicodeList.add("0x1f6a6");
        unicodeList.add("0x1f6a7");
        unicodeList.add("0x2693");
        unicodeList.add("0x26f5");
        unicodeList.add("0x1f6f3");
        unicodeList.add("0x1f6e5");
        unicodeList.add("0x26f4");
        unicodeList.add("0x1f6a2");
        unicodeList.add("0x2708");
        unicodeList.add("0x1f6e9");
        unicodeList.add("0x1f6eb");
        unicodeList.add("0x1f6ec");
        unicodeList.add("0x1f680");
        unicodeList.add("0x1f4ba");
        unicodeList.add("0x1f681");
        unicodeList.add("0x1f6f0");
        unicodeList.add("0x1f6ce");
        unicodeList.add("0x1f6aa");
        unicodeList.add("0x1f6cc");
        unicodeList.add("0x1f6cf");
        unicodeList.add("0x1f6cb");
        unicodeList.add("0x26b0");
        unicodeList.add("0x1f6bf");
        unicodeList.add("0x1f6c0");
        unicodeList.add("0x1f6c1");
        unicodeList.add("0x231b");
        unicodeList.add("0x23f3");
        unicodeList.add("0x231a");
        unicodeList.add("0x23f0");
        unicodeList.add("0x1f570");
        unicodeList.add("0x23f1");
        unicodeList.add("0x23f2");
        unicodeList.add("0x1f55b");
        unicodeList.add("0x1f567");
        unicodeList.add("0x1f550");
        unicodeList.add("0x1f55c");
        unicodeList.add("0x1f551");
        unicodeList.add("0x1f55d");
        unicodeList.add("0x1f552");
        unicodeList.add("0x1f55e");
        unicodeList.add("0x1f553");
        unicodeList.add("0x1f55f");
        unicodeList.add("0x1f554");
        unicodeList.add("0x1f560");
        unicodeList.add("0x1f555");
        unicodeList.add("0x1f561");
        unicodeList.add("0x1f556");
        unicodeList.add("0x1f562");
        unicodeList.add("0x1f557");
        unicodeList.add("0x1f563");
        unicodeList.add("0x1f558");
        unicodeList.add("0x1f564");
        unicodeList.add("0x1f559");
        unicodeList.add("0x1f565");
        unicodeList.add("0x1f55a");
        unicodeList.add("0x1f566");
        unicodeList.add("0x1f311");
        unicodeList.add("0x1f312");
        unicodeList.add("0x1f313");
        unicodeList.add("0x1f314");
        unicodeList.add("0x1f315");
        unicodeList.add("0x1f316");
        unicodeList.add("0x1f317");
        unicodeList.add("0x1f318");
        unicodeList.add("0x1f319");
        unicodeList.add("0x1f31a");
        unicodeList.add("0x1f31b");
        unicodeList.add("0x1f31c");
        unicodeList.add("0x1f321");
        unicodeList.add("0x2600");
        unicodeList.add("0x2609");
        unicodeList.add("0x1f31d");
        unicodeList.add("0x1f31e");
        unicodeList.add("0x2b50");
        unicodeList.add("0x1f31f");
        unicodeList.add("0x2604");
        unicodeList.add("0x1f320");
        unicodeList.add("0x26c6");
        unicodeList.add("0x2607");
        unicodeList.add("0x2608");
        unicodeList.add("0x26c8");
        unicodeList.add("0x2601");
        unicodeList.add("0x26c5");
        unicodeList.add("0x1f323");
        unicodeList.add("0x1f324");
        unicodeList.add("0x1f325");
        unicodeList.add("0x1f326");
        unicodeList.add("0x1f327");
        unicodeList.add("0x1f328");
        unicodeList.add("0x1f329");
        unicodeList.add("0x1f32a");
        unicodeList.add("0x1f32b");
        unicodeList.add("0x1f32c");
        unicodeList.add("0x26c4");
        unicodeList.add("0x26c7");
        unicodeList.add("0x2603");
        unicodeList.add("0x1f302");
        unicodeList.add("0x2602");
        unicodeList.add("0x2614");
        unicodeList.add("0x2744");
        unicodeList.add("0x1f4a7");
        unicodeList.add("0x1f30a");
        unicodeList.add("0x1f525");
        unicodeList.add("0x1f383");
        unicodeList.add("0x1f300");
        unicodeList.add("0x1f308");
        unicodeList.add("0x1f384");
        unicodeList.add("0x1f386");
        unicodeList.add("0x1f387");
        unicodeList.add("0x2747");
        unicodeList.add("0x2728");
        unicodeList.add("0x1f388");
        unicodeList.add("0x1f389");
        unicodeList.add("0x1f38a");
        unicodeList.add("0x1f38b");
        unicodeList.add("0x1f38c");
        unicodeList.add("0x1f38d");
        unicodeList.add("0x1f38e");
        unicodeList.add("0x1f38f");
        unicodeList.add("0x1f390");
        unicodeList.add("0x1f391");
        unicodeList.add("0x1f380");
        unicodeList.add("0x1f381");
        unicodeList.add("0x1f396");
        unicodeList.add("0x1f397");
        unicodeList.add("0x1f39e");
        unicodeList.add("0x1f39f");
        unicodeList.add("0x1f3ab");
        unicodeList.add("0x1f3f7");
        unicodeList.add("0x26bd");
        unicodeList.add("0x26be");
        unicodeList.add("0x1f3c0");
        unicodeList.add("0x1f3c8");
        unicodeList.add("0x1f3c9");
        unicodeList.add("0x1f3be");
        unicodeList.add("0x1f3b1");
        unicodeList.add("0x1f3b3");
        unicodeList.add("0x26f3");
        unicodeList.add("0x1f3cc");
        unicodeList.add("0x1f3a3");
        unicodeList.add("0x1f3bd");
        unicodeList.add("0x1f3bf");
        unicodeList.add("0x1f3c3");
        unicodeList.add("0x1f3c2");
        unicodeList.add("0x26f7");
        unicodeList.add("0x1f3c4");
        unicodeList.add("0x1f3c7");
        unicodeList.add("0x1f3ca");
        unicodeList.add("0x1f3cb");
        unicodeList.add("0x26f9");
        unicodeList.add("0x26f8");
        unicodeList.add("0x1f3ce");
        unicodeList.add("0x1f3cd");
        unicodeList.add("0x1f3c5");
        unicodeList.add("0x1f3c6");
        unicodeList.add("0x1f3cf");
        unicodeList.add("0x1f3d0");
        unicodeList.add("0x1f3d1");
        unicodeList.add("0x1f3d2");
        unicodeList.add("0x1f3d3");
        unicodeList.add("0x1f3f8");
        unicodeList.add("0x1f3af");
        unicodeList.add("0x1f3ae");
        unicodeList.add("0x1f579");
        unicodeList.add("0x1f3b2");
        unicodeList.add("0x1f0cf");
        unicodeList.add("0x1f004");
        unicodeList.add("0x1f3b4");

        // Category 5 (Symbols, 212)

        unicodeList.add("0x1f3c1");
        unicodeList.add("0x1f3f3");
        unicodeList.add("0x1f3f4");
        unicodeList.add("0x1f6a9");
        unicodeList.add("0x1f6b6");
        unicodeList.add("0x1f6ae");
        unicodeList.add("0x1f6b0");
        unicodeList.add("0x267f");
        unicodeList.add("0x1f6b9");
        unicodeList.add("0x1f6ba");
        unicodeList.add("0x1f6bb");
        unicodeList.add("0x1f6bc");
        unicodeList.add("0x1f6bd");
        unicodeList.add("0x1f6be");
        unicodeList.add("0x1f6c2");
        unicodeList.add("0x1f6c3");
        unicodeList.add("0x1f6c4");
        unicodeList.add("0x1f6c5");
        unicodeList.add("0x1f6a3");
        unicodeList.add("0x1f6a4");
        unicodeList.add("0x1f6b2");
        unicodeList.add("0x1f6b4");
        unicodeList.add("0x1f6b5");
        unicodeList.add("0x1f6b8");
        unicodeList.add("0x26d4");
        unicodeList.add("0x1f6ac");
        unicodeList.add("0x1f6ab");
        unicodeList.add("0x1f6c7");
        unicodeList.add("0x1f6b3");
        unicodeList.add("0x1f6ad");
        unicodeList.add("0x1f6af");
        unicodeList.add("0x1f6b1");
        unicodeList.add("0x1f6b7");
        unicodeList.add("0x26cc");
        unicodeList.add("0x26cd");
        unicodeList.add("0x26d0");
        unicodeList.add("0x26d1");
        unicodeList.add("0x26d2");
        unicodeList.add("0x26d3");
        unicodeList.add("0x26d5");
        unicodeList.add("0x26d6");
        unicodeList.add("0x26d7");
        unicodeList.add("0x26d8");
        unicodeList.add("0x26d9");
        unicodeList.add("0x26da");
        unicodeList.add("0x26db");
        unicodeList.add("0x26dc");
        unicodeList.add("0x26dd");
        unicodeList.add("0x26de");
        unicodeList.add("0x26e0");
        unicodeList.add("0x26e1");
        unicodeList.add("0x26f6");
        unicodeList.add("0x26a0");
        unicodeList.add("0x2620");
        unicodeList.add("0x2621");
        unicodeList.add("0x2622");
        unicodeList.add("0x2623");
        unicodeList.add("0x2b06");
        unicodeList.add("0x2197");
        unicodeList.add("0x27a1");
        unicodeList.add("0x2198");
        unicodeList.add("0x2b07");
        unicodeList.add("0x2199");
        unicodeList.add("0x2b05");
        unicodeList.add("0x2196");
        unicodeList.add("0x2195");
        unicodeList.add("0x2194");
        unicodeList.add("0x21a9");
        unicodeList.add("0x21aa");
        unicodeList.add("0x2934");
        unicodeList.add("0x2935");
        unicodeList.add("0x1f503");
        unicodeList.add("0x1f504");
        unicodeList.add("0x1f519");
        unicodeList.add("0x1f51a");
        unicodeList.add("0x1f51b");
        unicodeList.add("0x1f51c");
        unicodeList.add("0x1f51d");
        unicodeList.add("0x2139");
        unicodeList.add("0x24c2");
        //duplicated image with the key on sym keyboard//
        //unicodeList.add( "0x25aa");
        unicodeList.add("0x25ab");
        unicodeList.add("0x25fe");
        unicodeList.add("0x25fd");
        unicodeList.add("0x25fc");
        unicodeList.add("0x25fb");
        unicodeList.add("0x2b1b");
        unicodeList.add("0x2b1c");
        unicodeList.add("0x1f536");
        unicodeList.add("0x1f537");
        unicodeList.add("0x1f538");
        unicodeList.add("0x1f539");
        unicodeList.add("0x1f53c");
        unicodeList.add("0x1f53d");


        unicodeList.add("0x1f4a0");
        unicodeList.add("0x1f518");
        unicodeList.add("0x1f532");
        unicodeList.add("0x1f533");
        unicodeList.add("0x26ac");
        unicodeList.add("0x26aa");
        unicodeList.add("0x26ab"); //100

        unicodeList.add("0x1f534");
        unicodeList.add("0x1f535");
        unicodeList.add("0x2b55");
        unicodeList.add("0x2668");
        unicodeList.add("0x1f4db");
        unicodeList.add("0x1f530");
        unicodeList.add("0x1f4f5");
        unicodeList.add("0x1f4f3");
        unicodeList.add("0x1f4f4");
        unicodeList.add("0x1f4af");
        unicodeList.add("0x1f51e");
        unicodeList.add("0x1f531");
        unicodeList.add("0x2705");
        unicodeList.add("0x2714");
        unicodeList.add("0x2610");
        unicodeList.add("0x2611");
        unicodeList.add("0x2612");
        unicodeList.add("0x2716");
        unicodeList.add("0x274c");
        unicodeList.add("0x274e");
        unicodeList.add("0x2795");
        unicodeList.add("0x2796");
        unicodeList.add("0x2797");
        unicodeList.add("0x2049");
        unicodeList.add("0x2753");
        unicodeList.add("0x2754");
        unicodeList.add("0x2755");
        unicodeList.add("0x2757");
        unicodeList.add("0x3030");
        unicodeList.add("0x27b0");
        unicodeList.add("0x27bf");
        //unicodeList.add( "0x271d");
        unicodeList.add("0x26ff");
        unicodeList.add("0x2690");
        unicodeList.add("0x2691");
        unicodeList.add("0x26e4");
        unicodeList.add("0x26e5");
        unicodeList.add("0x26e6");
        unicodeList.add("0x26e7");
        unicodeList.add("0x2721");
        //unicodeList.add( "0x002a");
        unicodeList.add("0x1f6c6");
        unicodeList.add("0x1f540");
        unicodeList.add("0x1f541");
        unicodeList.add("0x1f542");
        unicodeList.add("0x1f543");
        unicodeList.add("0x1f544");
        unicodeList.add("0x1f546");
        unicodeList.add("0x1f547");
        unicodeList.add("0x1f549");
        unicodeList.add("0x26c0");
        unicodeList.add("0x26c1");
        unicodeList.add("0x26c2");
        unicodeList.add("0x26c3");
        unicodeList.add("0x26c9");
        unicodeList.add("0x26ca");
        unicodeList.add("0x2616");
        unicodeList.add("0x2617");
        unicodeList.add("0x2686");
        unicodeList.add("0x2687");
        unicodeList.add("0x2688");
        unicodeList.add("0x2689");
        unicodeList.add("0x265a");
        unicodeList.add("0x265b");
        unicodeList.add("0x265c");
        unicodeList.add("0x265d");
        unicodeList.add("0x265e");
        unicodeList.add("0x265f");
        unicodeList.add("0x2654");
        unicodeList.add("0x2655");
        unicodeList.add("0x2656");
        unicodeList.add("0x2657");
        unicodeList.add("0x2658");
        unicodeList.add("0x2659");
        unicodeList.add("0x261a");
        unicodeList.add("0x261b");
        unicodeList.add("0x261c");
        unicodeList.add("0x261e");
        unicodeList.add("0x261f");
        unicodeList.add("0x266b");
        unicodeList.add("0x266c");
        unicodeList.add("0x266d");
        unicodeList.add("0x266e");
        unicodeList.add("0x266f");
        unicodeList.add("0x268a");
        unicodeList.add("0x268b");
        unicodeList.add("0x268c");
        unicodeList.add("0x268d");
        unicodeList.add("0x268e");
        unicodeList.add("0x268f");
        unicodeList.add("0x2630");
        unicodeList.add("0x2631");
        unicodeList.add("0x2632");
        unicodeList.add("0x2633");
        unicodeList.add("0x2634");
        unicodeList.add("0x2635");
        unicodeList.add("0x2636");
        unicodeList.add("0x2637");
        unicodeList.add("0x267a"); //200

        unicodeList.add("0x267b");
        unicodeList.add("0x267c");
        unicodeList.add("0x267d");
        unicodeList.add("0x2672");
        unicodeList.add("0x2673");
        unicodeList.add("0x2674");
        unicodeList.add("0x2675");
        unicodeList.add("0x2676");
        unicodeList.add("0x2677");
        unicodeList.add("0x2678");
        unicodeList.add("0x2679");
        unicodeList.add("0x1f500");
        unicodeList.add("0x1f501");
        unicodeList.add("0x1f502");
        unicodeList.add("0x25b6");
        unicodeList.add("0x23e9");
        unicodeList.add("0x23ed");
        unicodeList.add("0x23ef");
        unicodeList.add("0x25c0");
        unicodeList.add("0x23ea");
        unicodeList.add("0x23ee");
        unicodeList.add("0x1f53a");
        unicodeList.add("0x23eb");
        unicodeList.add("0x1f53b");
        unicodeList.add("0x23ec");
        unicodeList.add("0x23f8");
        unicodeList.add("0x23f9");
        unicodeList.add("0x23fa");
        unicodeList.add("0x23CF");
        unicodeList.add("0x269b");
        unicodeList.add("0x26b2");
        unicodeList.add("0x26bf");
        unicodeList.add("0x26e3");
        unicodeList.add("0x26e8");
        unicodeList.add("0x26e9");
        unicodeList.add("0x26eb");
        unicodeList.add("0x26ec");
        //unicodeList.add( "0x2683");
        unicodeList.add("0x26ed");
        unicodeList.add("0x26ee");
        unicodeList.add("0x2638");
        unicodeList.add("0x26ef");
        unicodeList.add("0x2699");
        unicodeList.add("0x26f0");
        unicodeList.add("0x26fb");
        unicodeList.add("0x260d");
        unicodeList.add("0x2692");
        unicodeList.add("0x2694");
        unicodeList.add("0x2696");
        unicodeList.add("0x2670");
        unicodeList.add("0x2671");
        unicodeList.add("0x1f6d0");
        unicodeList.add("0x2734");
        //unicodeList.add( "0x2747");
        unicodeList.add("0x2733");
        unicodeList.add("0x1f52f");
        unicodeList.add("0x26ce");
        unicodeList.add("0x2648");
        unicodeList.add("0x2649");
        unicodeList.add("0x264a");
        unicodeList.add("0x264b");
        unicodeList.add("0x264c");
        unicodeList.add("0x264d");
        unicodeList.add("0x264e");
        unicodeList.add("0x264f");
        unicodeList.add("0x2650");
        unicodeList.add("0x2651");
        unicodeList.add("0x2652");
        unicodeList.add("0x2653");
        unicodeList.add("0x26b3");
        unicodeList.add("0x26b4");
        unicodeList.add("0x26b5");
        unicodeList.add("0x26b6");
        unicodeList.add("0x26b7");
        unicodeList.add("0x26b8");
        unicodeList.add("0x26b9");
        unicodeList.add("0x26ba");
        unicodeList.add("0x26bb");
        unicodeList.add("0x26bc");
        unicodeList.add("0x26cb");
        unicodeList.add("0x26e2");
        unicodeList.add("0x260a");
        unicodeList.add("0x260b");
        unicodeList.add("0x260c");
        unicodeList.add("0x263f");
        unicodeList.add("0x269c");
        unicodeList.add("0x269d");
        unicodeList.add("0x263d");
        unicodeList.add("0x263e");
        unicodeList.add("0x2643");
        unicodeList.add("0x2644");
        unicodeList.add("0x2645");
        unicodeList.add("0x2646");
        unicodeList.add("0x2647");
        unicodeList.add("0x2695");
        unicodeList.add("0x269a");
        unicodeList.add("0x1f4b2");
        unicodeList.add("0x1f4b1");
        unicodeList.add("0x303d");
        unicodeList.add("0x1f505"); //300

        unicodeList.add("0x1f506");
        unicodeList.add("0x262c");
        unicodeList.add("0x262d");
        unicodeList.add("0x262e");
        unicodeList.add("0x262f");
        unicodeList.add("0x263c");
        unicodeList.add("0x269e");
        unicodeList.add("0x269f");
        //duplicated
        //unicodeList.add( "0x262a");
        unicodeList.add("0x262b");
        unicodeList.add("0x2624");
        unicodeList.add("0x2625");
        unicodeList.add("0x2626");
        unicodeList.add("0x2627");
        unicodeList.add("0x2628");
        unicodeList.add("0x2629");
        unicodeList.add("0xff1f");
        unicodeList.add("0x1f3a6");
        unicodeList.add("0x1f520");
        unicodeList.add("0x1f521");
        unicodeList.add("0x1f522");
        unicodeList.add("0x1f523");
        unicodeList.add("0x1f524");
        unicodeList.add("0x1f170");
        unicodeList.add("0x1f18e");
        unicodeList.add("0x1f171");
        unicodeList.add("0x1f191");
        unicodeList.add("0x1f192");
        unicodeList.add("0x1f193");
        unicodeList.add("0x1f194");
        unicodeList.add("0x1f195");
        unicodeList.add("0x1f196");
        unicodeList.add("0x1f17e");
        unicodeList.add("0x1f197");
        unicodeList.add("0x1f17f");
        unicodeList.add("0x1f198");
        unicodeList.add("0x1f199");
        unicodeList.add("0x1f19a");
        unicodeList.add("0x1f201");
        unicodeList.add("0x1f202");
        unicodeList.add("0x1f237");
        unicodeList.add("0x1f236");
        unicodeList.add("0x1f22f");
        unicodeList.add("0x1f250");
        unicodeList.add("0x1f239");
        unicodeList.add("0x1f21a");
        unicodeList.add("0x1f232");
        unicodeList.add("0x1f251");
        unicodeList.add("0x1f238");
        unicodeList.add("0x1f234");
        unicodeList.add("0x1f233");
        unicodeList.add("0x3297");
        unicodeList.add("0x3299");
        unicodeList.add("0x1f23a");
        unicodeList.add("0x1f235");
        unicodeList.add("0x1f4f6");
        unicodeList.add("0x26a2");
        unicodeList.add("0x26a3");
        unicodeList.add("0x26a6");
        unicodeList.add("0x2641");
        unicodeList.add("0x26a4");
        unicodeList.add("0x26a5");
        unicodeList.add("0x26a7");
        unicodeList.add("0x26a8");
        unicodeList.add("0x26a9");
        unicodeList.add("0x26ad");
        unicodeList.add("0x26ae");
        unicodeList.add("0x26af");
        unicodeList.add("0x2619");
        unicodeList.add("0x2680");
        unicodeList.add("0x2681");
        unicodeList.add("0x2682");
        unicodeList.add("0x2683");
        unicodeList.add("0x2684");
        unicodeList.add("0x2685");
        unicodeList.add("0x1f51f");
        unicodeList.add("0x26fe");
        unicodeList.add("0x267e");


        // Category 6 (Faces, 89)
        unicodeList.add("0x263a");

        // Category 7 (Human, 70)
        unicodeList.add("0x2764");
        unicodeList.add("0x2728");
        unicodeList.add("0x2734");
        unicodeList.add("0x2b50");
        unicodeList.add("0x2747");
        unicodeList.add("0x26a0");
        unicodeList.add("0x270a");
        unicodeList.add("0x270c");
        unicodeList.add("0x270b");
        unicodeList.add("0x261d");
        unicodeList.add("0x2757");
        unicodeList.add("0x2755");
        unicodeList.add("0x203c");
        unicodeList.add("0x2049");
        unicodeList.add("0x2753");
        unicodeList.add("0x2754");

        // Category 9 (Food, 60)
        unicodeList.add("0x2615");

        // Category 10 (Nature, 54)
        unicodeList.add("0x2600");
        unicodeList.add("0x2601");
        unicodeList.add("0x26c5");
        unicodeList.add("0x2614");
        unicodeList.add("0x26c4");
        unicodeList.add("0x2744");
        unicodeList.add("0x26a1");

        // Category 11 (Fashion, 71)
        unicodeList.add("0x26be");
        unicodeList.add("0x26bd");
        unicodeList.add("0x26f3");
        unicodeList.add("0x2668");
        unicodeList.add("0x26fa");

        // Category 12 (Map/Bldg, 59)
        unicodeList.add("0x24c2");
        unicodeList.add("0x2708");
        unicodeList.add("0x2693");
        unicodeList.add("0x26f5");
        unicodeList.add("0x26fd");
        unicodeList.add("0x26f2");
        unicodeList.add("0x26ea");
        unicodeList.add("0x26d4");

        // Category 13 (Tool, 89)
        unicodeList.add("0x260e");
        unicodeList.add("0x231a");
        unicodeList.add("0x23f0");
        unicodeList.add("0x23f3");
        unicodeList.add("0x231b");
        unicodeList.add("0x270f");
        unicodeList.add("0x2712");
        unicodeList.add("0x2702");

        // Category 14 (Symbol, 162)
        unicodeList.add("0x2709");
        unicodeList.add("0x3297");
        unicodeList.add("0x3299");
        unicodeList.add("0x2139");
        unicodeList.add("0x267F");
        unicodeList.add("0x267B");
        unicodeList.add("0x00A9");
        unicodeList.add("0x00AE");
        unicodeList.add("0x2122");
        unicodeList.add("0x27BF");
        unicodeList.add("0x2795");
        unicodeList.add("0x2796");
        unicodeList.add("0x2716");
        unicodeList.add("0x2797");
        unicodeList.add("0x2733");
        unicodeList.add("0x303D");
        unicodeList.add("0x3030");
        unicodeList.add("0x27B0");
        unicodeList.add("0x2934");
        unicodeList.add("0x2935");
        unicodeList.add("0x2B06");
        unicodeList.add("0x2B07");
        unicodeList.add("0x27A1");
        unicodeList.add("0x2B05");
        unicodeList.add("0x2195");
        unicodeList.add("0x2194");
        unicodeList.add("0x2197");
        unicodeList.add("0x2198");
        unicodeList.add("0x2196");
        unicodeList.add("0x2199");
        unicodeList.add("0x21AA");
        unicodeList.add("0x21A9");
        unicodeList.add("0x25B6");
        unicodeList.add("0x25C0");
        unicodeList.add("0x23E9");
        unicodeList.add("0x23EA");
        unicodeList.add("0x23EB");
        unicodeList.add("0x23EC");
        unicodeList.add("0x2648");
        unicodeList.add("0x2649");
        unicodeList.add("0x264A");
        unicodeList.add("0x264B");
        unicodeList.add("0x264C");
        unicodeList.add("0x264D");
        unicodeList.add("0x264E");
        unicodeList.add("0x264F");
        unicodeList.add("0x2650");
        unicodeList.add("0x2651");
        unicodeList.add("0x2652");
        unicodeList.add("0x2653");
        unicodeList.add("0x26CE");
        unicodeList.add("0x2B55");
        unicodeList.add("0x274C");
        unicodeList.add("0x274E");
        unicodeList.add("0x2714");
        unicodeList.add("0x2705");
        unicodeList.add("0x2611");
        unicodeList.add("0x26AA");
        unicodeList.add("0x26AB");
        unicodeList.add("0x2B1C");
        unicodeList.add("0x2B1B");
        unicodeList.add("0x25AB");
        //unicodeList.add("0x25AA");
        unicodeList.add("0x25FD");
        unicodeList.add("0x25FE");
        unicodeList.add("0x25FB");
        unicodeList.add("0x25FC");

        // Category 15 (Flags)
        unicodeList.add("0x1F1E6");
        unicodeList.add("0x1F1E7");
        unicodeList.add("0x1F1E8");
        unicodeList.add("0x1F1E9");
        unicodeList.add("0x1F1EA");
        unicodeList.add("0x1F1EB");
        unicodeList.add("0x1F1EC");
        unicodeList.add("0x1F1ED");
        unicodeList.add("0x1F1EE");
        unicodeList.add("0x1F1EF");
        unicodeList.add("0x1F1F0");
        unicodeList.add("0x1F1F1");
        unicodeList.add("0x1F1F2");
        unicodeList.add("0x1F1F3");
        unicodeList.add("0x1F1F4");
        unicodeList.add("0x1F1F5");
        unicodeList.add("0x1F1F6");
        unicodeList.add("0x1F1F7");
        unicodeList.add("0x1F1F8");
        unicodeList.add("0x1F1F9");
        unicodeList.add("0x1F1FA");
        unicodeList.add("0x1F1FB");
        unicodeList.add("0x1F1FC");
        unicodeList.add("0x1F1FD");
        unicodeList.add("0x1F1FE");
        unicodeList.add("0x1F1FF");
    }
}
